import axios from 'axios'
import {
    ElMessage
} from 'element-plus'
import config from '../config/index'

// 网络请求异常消息提示
const NETWORK_Message = '网络请求异常'
// 创建一个axios对象
const http = axios.create({
    baseURL: 'config.baseApi'
})

// 在请求之前做一些事情
// http.interceptors.request.use()

// 在响应之后做一些处理
http.interceptors.response.use(
    res => {
        // 把响应的数据结果出来
        const {
            code,
            data,
            msg
        } = res.data
        // 视开发情况决定
        if (code == 200) {
            return data
        } else {
            // 网络错误
            ElMessage.error(msg || NETWORK_Message)
            return Promise.reject(msg || NETWORK_Message)
        }
    }
)

// 封装的接口核心函数
function request(options) {
    // 如果是get请求，把data赋值给perams
    options.method = options.method || 'get'
    if (options.method.toLowerCase() == 'get') {
        options.params = options.data
    }

    // 对mock进行处理
    // 获取到mock的总开关
    let isMock = config.mock
    // 如果接口设置了mock,则把isMock的值变为自己设置的mock值
    if (typeof options.mock != 'undefined') {
        isMock = options.mock
    }

    // 对线上环境做处理
    if (config.env == 'prod') {
        http.defaults.baseURL = config.baseURL
    } else {
        http.defaults.baseURL = isMock ? config.mockApi : config.baseApi
    }
    return http(options)
}

export default request